tools: Always use sane upstream (`native') python paths
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 8 Apr 2009 18:13:04 +0000 (19:13 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 8 Apr 2009 18:13:04 +0000 (19:13 +0100)
Previously, by default we would install our python modules into
/usr/lib/python/xen, for example /usr/lib/python/xen/__init__.py.
Upstream python's standard install location (a) includes the Python
version number and (b) puts things in site-packages by default.

Our best conjecture for the reason for this was an attempt to make the
installs portable between different python versions.  However, that
doesn't work because compiled python modules (.pyc), and C python
extensions corresponding to one version of python, are not compatible
across different versions of python.

This is why upstream include the version number.

site-packages is the standard location for locally-installed packages
and is automatically included on the python search path.

In this change, we abandon our own unusual python path setup:

 * Invoke setup.py in an entirely standard manner.  We pass
   PREFIX and DESTDIR using the appropriate options provided by
   setup.py for those purposes (adding them to setup.py calls
   which were previously lacking them).

 * Since the installation locations are now on the standard
   python path, we no longer need to add anything to the path
   in any of our python utilities.  Therefore remove all that
   code from every python script.  (Many of these scripts
   unconditionally added /usr/lib/python and /usr/lib64/python which
   is wrong even in the old world.)

 * There is no longer any special `Xen python path'.  xen-python-path
   is no longer needed.  It is no longer called by anything in our
   tree.  However since out-of-tree callers may still invoke it, we
   retain it.  It now prints a fixed string referring to a directory
   which does not to exist; callers (who use it to augment their
   python path) will thus add a nonexistent directory to their python
   path which is harmless.

 * Remove various workarounds including use of setup.py --home
   (which is intended for something completely different).

 * Remove tests for the XEN_PYTHON_NATIVE_INSTALL build-time
   environment variable.  The new behaviour is the behaviour which we
   should have had if this variable had been set.  That is, it is now
   as if this variable was always set but also bugs in the resulting
   install have been fixed.

This should be a proper fix for the bug addressed by c/s 19515.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
18 files changed:
Makefile
tools/misc/sxp-pretty
tools/misc/xen-bugtool
tools/misc/xen-python-path
tools/misc/xend
tools/misc/xm
tools/misc/xsview
tools/pygrub/Makefile
tools/pygrub/src/pygrub
tools/python/Makefile
tools/python/scripts/test_hvm_create.py
tools/python/scripts/test_vm_create.py
tools/python/scripts/xapi.py
tools/security/Makefile
tools/security/python/xensec_tools/acm_getlabel
tools/security/xensec_gen.py
tools/sv/index.psp
tools/vnet/scripts/vn

index 131ab3d1a36c03cbdc40a6d81c6583390a3cfaa7..237c107ff02cec8fe8372a9af6692194e961be23 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -188,11 +188,7 @@ help:
        @echo '  clean-tboot      - clean the tboot module if it exists'
        @echo
        @echo 'Environment:'
-       @echo '  XEN_PYTHON_NATIVE_INSTALL=y'
-       @echo '                   - native python install or dist'
-       @echo '                     install into prefix/lib/python<VERSION>'
-       @echo '                     instead of <PREFIX>/lib/python'
-       @echo '                     true if set to non-empty value, false otherwise'
+       @echo '  [ this documentation is sadly not complete ]'
 
 # Use this target with extreme care!
 .PHONY: uninstall
index 4b8eaed3356a96620e3323baec5a7bc15bf8b968..dd642b088e24cd31fb5e145db6910b2efc7d0fa4 100644 (file)
@@ -23,14 +23,6 @@ import os.path
 import pprint
 import sys
 
-result = commands.getstatusoutput(os.path.join(os.path.dirname(sys.argv[0]),
-                                               'xen-python-path'))
-if result[0] != 0:
-    print >>sys.stderr, result[1]
-    sys.exit(1)
-
-sys.path.append(result[1])
-
 import xen.xend.sxp as sxp
 
 def main():
index cf41c8c9579ca6ecf283c6d98eed793883949689..a3742b47876548b571fca546de4921d782b13b18 100644 (file)
@@ -6,9 +6,6 @@
 
 import sys
 
-sys.path.append('/usr/lib/python')
-sys.path.append('/usr/lib64/python')
-
 from xen.util import bugtool
 
 
index 57774a332b9bad45f882c03a6b5a58e9f4f358f1..073abaef535c8ee5af51d66bb879fe258f066065 100644 (file)
 # Copyright (C) 2007 XenSource Inc.
 #============================================================================
 
+# Nowadays we install xen in the standard python site-packages
+# directories.  This script is still provided for the benefit of old
+# out-of-xen-tree callers.  It is deprecated and will be removed.
 
-# Use the auxbin module in Xend to determine the correct Python path.  We
-# take the first installed instance of auxbin that we find, and then run it
-# to determine the correct path, appending that to sys.path.
-
-AUXBIN = 'xen/util/auxbin.py'
-
-import os
-import os.path
-import sys
-
-usr   = os.path.dirname(os.path.dirname(sys.argv[0]))
-list  = [ os.path.join(usr,'lib64') ]
-list += [ os.path.join(usr,'lib') ]
-list += ['/usr/lib64', '/usr/lib']
-
-for l in list:
-    for p in ['python%s' % sys.version[:3], 'python']:
-        for k in ['', 'site-packages/']:
-            d = os.path.join(l, p, k)
-            if os.path.exists(os.path.join(d, AUXBIN)):
-                sys.path.append(d)
-                import xen.util.auxbin
-                print os.path.join(xen.util.auxbin.libpath(), p)
-                sys.exit(0)
-
-print >>sys.stderr, "Cannot find Xen Python modules."
-sys.exit(1)
+print '/dev/enoent/xen/python-path'
index 2cbdf6175c9343df740153c10791494bc4c9f3af..4dd550bbed2ca0210533719d0fdd9946823a8498 100644 (file)
@@ -33,14 +33,6 @@ import signal
 import time
 import commands
 
-xpp = os.path.join(os.path.dirname(sys.argv[0]), 'xen-python-path')
-if os.path.exists(xpp):
-    result = commands.getstatusoutput(xpp)
-    if result[0] != 0:
-        print >>sys.stderr, result[1]
-        sys.exit(1)
-    sys.path.append(result[1])
-
 from xen.xend.server import SrvDaemon
 
 class CheckError(ValueError):
index 80972ccef94369cc5df5306cde7ae0f89d873459..f4fd2003463cb57557b2c6457a2dadcfd71d4c21 100755 (executable)
@@ -2,9 +2,6 @@
 #  -*- mode: python; -*-
 import sys
 
-# add fallback path for non-native python path installs if needed
-sys.path.append('/usr/lib/python')
-sys.path.append('/usr/lib64/python')
 from xen.xm import main
 
 main.main(sys.argv)
index c6726554b7e36c6175be66f2124883abfad15e69..f926fe4fc6f3980d8533f0aba9a405b8c680591d 100644 (file)
@@ -2,8 +2,6 @@
 
 import sys
 
-sys.path.append('/usr/lib/python')
-sys.path.append('/usr/lib64/python')
 from xen.xsview import main
 
 main.main(sys.argv)
index 0e30db481c5f41052f4f15d0ce8887846d5b11cc..0791012e2a7120f639e23fa354a5ebbfa26e5b97 100644 (file)
@@ -9,15 +9,10 @@ build:
        CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py build
 
 .PHONY: install
-ifndef XEN_PYTHON_NATIVE_INSTALL
 install: all
-       CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)" --home="$(PREFIX)" --prefix="" --force
+       CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \
+               --prefix="$(PREFIX)" --root="$(DESTDIR)" --force
        $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot
-else
-install: all
-       CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)"
-       $(INSTALL_DIR) $(DESTDIR)/var/run/xend/boot
-endif
 
 .PHONY: clean
 clean:
index e43dcc2d9a62128e29fc151a494ca8f5a8a22e5e..095db5e72c59264b83ce27e9b17937c34333e3ab 100644 (file)
@@ -21,8 +21,6 @@ import platform
 import curses, _curses, curses.wrapper, curses.textpad, curses.ascii
 import getopt
 
-sys.path = [ '/usr/lib/python', '/usr/lib64/python' ] + sys.path
-
 import fsimage
 import grub.GrubConf
 import grub.LiloConf
index 700640645bb4372cc7bf8130dab15a2dbb1c2361..cbc3973d0285fe1f2192b5050c9404cba113a7ca 100644 (file)
@@ -54,13 +54,9 @@ refresh-po: $(POTFILE)
        $(MSGFMT) -c -o $@ $<
 
 .PHONY: install
-ifndef XEN_PYTHON_NATIVE_INSTALL
 install: install-messages install-dtd
-       CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)" --home="$(PREFIX)" --prefix="" --force
-else
-install: install-messages install-dtd
-       CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)" --force
-endif
+       CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install \
+               --prefix="$(PREFIX)" --root="$(DESTDIR)" --force
 
 install-dtd: all
        $(INSTALL_DIR) $(DESTDIR)$(DOCDIR)
index 35abfe03967b4de19c254103027759b190f534de..50203635dae8adb2ffc3e7e5fa4056a5453215dd 100644 (file)
@@ -74,7 +74,6 @@ console_cfg = {
 
 import sys
 import time
-sys.path.append('/usr/lib/python')
 
 from xapi import connect, execute
 
index 6575f153eab8a5f637da0e7b481bd4080df99e7c..9ac8a6eee2b79ed601b853802a3795b71f290223 100644 (file)
@@ -93,7 +93,6 @@ console_cfg = {
 
 import sys
 import time
-sys.path.append('/usr/lib/python')
 
 from xapi import connect, execute
 
index 1a07795212173b1dd1ced1a66e88a7924a1f861e..9530f4a151dd7c6f8e493688634615b475cbbc9d 100644 (file)
@@ -20,7 +20,6 @@ import sys
 import time
 import re
 import os
-sys.path.append('/usr/lib/python')
 
 from xen.util.xmlrpclib2 import ServerProxy
 from optparse import *
index 61062715a26578d5506cbdab5a2ffc6c1196644a..996e96599a7c67f1c6a76a372144361992ead221 100644 (file)
@@ -40,9 +40,6 @@ ifeq ($(ACM_SECURITY),y)
 all: build
 
 .PHONY: install
-ifndef XEN_PYTHON_NATIVE_INSTALL
-install: LIBPATH=$(shell PYTHONPATH=../python/xen/util python -c "import auxbin; print auxbin.libpath()")
-endif
 install: all $(ACM_CONFIG_FILE)
        $(INSTALL_DIR) $(DESTDIR)$(SBINDIR)
        $(INSTALL_PROG) $(ACM_INST_TOOLS) $(DESTDIR)$(SBINDIR)
@@ -63,11 +60,8 @@ install: all $(ACM_CONFIG_FILE)
        $(INSTALL_DATA) $(ACM_INST_HTML) $(DESTDIR)$(ACM_SECGEN_HTMLDIR)
        $(INSTALL_DIR) $(DESTDIR)$(ACM_SECGEN_CGIDIR)
        $(INSTALL_PROG) $(ACM_INST_CGI) $(DESTDIR)$(ACM_SECGEN_CGIDIR)
-ifndef XEN_PYTHON_NATIVE_INSTALL
-       python python/setup.py install --install-lib="$(DESTDIR)$(LIBPATH)/python"
-else
-       python python/setup.py install --root="$(DESTDIR)"
-endif
+       python python/setup.py install \
+               --prefix="$(PREFIX)" --root="$(DESTDIR)" --force
 else
 .PHONY: all
 all:
index 63137a9993b4cb53ae53718fa8bd309829334595..8d5fe22461f8a5f78a797c1eea8fb65619e0471b 100644 (file)
@@ -4,10 +4,6 @@ import sys
 import traceback
 import getopt
 
-# add fallback path for non-native python path installs if needed
-sys.path.insert(-1, '/usr/lib/python')
-sys.path.insert(-1, '/usr/lib64/python')
-
 from xen.util.security import ACMError, err, get_ssid
 
 # getopt.gnu_getopt is better, but only exists in Python 2.3+.  Use
index 8f65b4cf1a0e04f44f797de2a2a5b9ba5c277751..d53177766083ba168cf1139114be508166ed2411 100644 (file)
 
 import sys
 
-# Add fallback path for non-native python path installs if needed
-sys.path.append( '/usr/lib/python' )
-sys.path.append( '/usr/lib64/python' )
-
 from xen.xensec_gen import main
 
 main.main( )
index 192aff84fa5e0b69b543ad8314628c858894cb3b..829d468db44bc00d9dfa6e231f0f941774fa5840 100755 (executable)
@@ -1,6 +1,5 @@
 <%
 import sys
-sys.path.append( "/usr/lib/python" )
 
 debug = True and False
 
index 8e8e224d4bdbe2c37c6a24c6b67478b105c620eb..4a4281f6f1003eca644aa2c8f73032c733fcd320 100644 (file)
@@ -27,9 +27,6 @@ import socket
 import sys
 from getopt import getopt, GetoptError
 
-sys.path.append('/usr/lib/python')
-sys.path.append('/usr/lib64/python')
-
 from xen.xend import sxp
 from xen.xend.PrettyPrint import prettyprint